package com.pcee.slf4j.logger;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.Marker;
import org.slf4j.helpers.FormattingTuple;
import org.slf4j.helpers.MessageFormatter;
public class PceeLogger implements Logger{
private boolean debugEnabled = false;
private boolean warnEnabled = false;
private boolean infoEnabled = true;
private boolean traceEnabled = false;
private boolean errorEnabled = true;
private List<LogModule> logModules;
private String name;
private String shortName;
public PceeLogger(String name) {
this.name = name;
this.logModules = new ArrayList<LogModule>();
logModules.add(new ConsoleLogModule());
this.shortName = name.substring(name.lastIndexOf(".") + 1);
}
public PceeLogger(String name, List<LogModule> logModules) {
this.name = name;
this.logModules = logModules;
this.shortName = name.substring(name.lastIndexOf(".") + 1);
}
private String convertStackTrace(Throwable arg1) {
if (arg1!=null) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
arg1.printStackTrace(pw);
return sw.toString();
} else
return "";
}
private boolean isLevelEnabled(LogLevelEnum level) {
switch (level) {
case DEBUG : return isDebugEnabled();
case ERROR : return isErrorEnabled();
case TRACE : return isTraceEnabled();
case WARN : return isWarnEnabled();
case INFO : return isInfoEnabled();
default: return false;
}
}
private String getMarker (LogLevelEnum level) {
return "[" + level + "-" + shortName + "]";
}
private String formatLog(Marker arg0, String arg1) {
return "(" + arg0 + ")" + arg1;
}
private void log (LogLevelEnum level, String msg) {
if (isLevelEnabled(level)) {
Iterator<LogModule> iter = logModules.iterator();
String out = getMarker(level) + msg;
while(iter.hasNext()) {
iter.next().log(level, out);
}
}
}
private void log (LogLevelEnum level, String arg0, Object arg1) {
FormattingTuple tp = MessageFormatter.format(arg0, arg1);
log(level, tp.getMessage(), tp.getThrowable());
}
private void log(LogLevelEnum level, String arg0, Object... arg1) {
FormattingTuple tp = MessageFormatter.format(arg0, arg1);
log(level, tp.getMessage(), tp.getThrowable());
}
private void log(LogLevelEnum level, String arg0, Throwable arg1) {
String out = arg0 + ":" + convertStackTrace(arg1);
log (level, out);
}
private void log(LogLevelEnum level, Marker arg0, String arg1) {
String out = arg0 + ":" + arg1;
log(level, out);
}
private void log(LogLevelEnum level, String arg0, Object arg1, Object arg2) {
FormattingTuple tp = MessageFormatter.format(arg0, arg1, arg2);
log(level, tp.getMessage(), tp.getThrowable());
}
private void log(LogLevelEnum level, Marker arg0, String arg1, Object arg2) {
FormattingTuple tp = MessageFormatter.format(arg1, arg2);
log(level, formatLog(arg0, tp.getMessage()), tp.getThrowable());
}
private void log(LogLevelEnum level, Marker arg0, String arg1, Object... arg2) {
FormattingTuple tp = MessageFormatter.format(arg1, arg2);
log(level, formatLog(arg0, tp.getMessage()), tp.getThrowable());
}
private void log(LogLevelEnum level, Marker arg0, String arg1, Throwable arg2) {
log(level, formatLog(arg0, arg1), arg2);
}
private void log(LogLevelEnum level, Marker arg0, String arg1, Object arg2, Object arg3) {
FormattingTuple tp = MessageFormatter.format(arg1, arg2, arg3);
log(level, formatLog(arg0, tp.getMessage()), tp.getThrowable());
}
@Override
public void debug(String arg0) {
log (LogLevelEnum.DEBUG, arg0);
}
@Override
public void debug(String arg0, Object arg1) {
log (LogLevelEnum.DEBUG, arg0, arg1);
}
@Override
public void debug(String arg0, Object... arg1) {
log (LogLevelEnum.DEBUG, arg0, arg1);
}
@Override
public void debug(String arg0, Throwable arg1) {
log(LogLevelEnum.DEBUG, arg0 , arg1);
}
@Override
public void debug(Marker arg0, String arg1) {
log(LogLevelEnum.DEBUG, arg0, arg1);
}
@Override
public void debug(String arg0, Object arg1, Object arg2) {
log(LogLevelEnum.DEBUG, arg0, arg1 , arg2);
}
@Override
public void debug(Marker arg0, String arg1, Object arg2) {
log(LogLevelEnum.DEBUG, arg0, arg1, arg2);
}
@Override
public void debug(Marker arg0, String arg1, Object... arg2) {
log(LogLevelEnum.DEBUG, arg0, arg1, arg2);
}
@Override
public void debug(Marker arg0, String arg1, Throwable arg2) {
log(LogLevelEnum.DEBUG, arg0, arg1, arg2);
}
@Override
public void debug(Marker arg0, String arg1, Object arg2, Object arg3) {
log(LogLevelEnum.DEBUG, arg0, arg1, arg2, arg3);
}
@Override
public void error(String arg0) {
log (LogLevelEnum.ERROR, arg0);
}
@Override
public void error(String arg0, Object arg1) {
log (LogLevelEnum.ERROR, arg0, arg1);
}
@Override
public void error(String arg0, Object... arg1) {
log (LogLevelEnum.ERROR, arg0, arg1);
}
@Override
public void error(String arg0, Throwable arg1) {
log (LogLevelEnum.ERROR, arg0, arg1);
}
@Override
public void error(Marker arg0, String arg1) {
log (LogLevelEnum.ERROR, arg0, arg1);
}
@Override
public void error(String arg0, Object arg1, Object arg2) {
log (LogLevelEnum.ERROR, arg0, arg1, arg2);
}
@Override
public void error(Marker arg0, String arg1, Object arg2) {
log (LogLevelEnum.ERROR, arg0, arg1, arg2);
}
@Override
public void error(Marker arg0, String arg1, Object... arg2) {
log (LogLevelEnum.ERROR, arg0, arg1, arg2);
}
@Override
public void error(Marker arg0, String arg1, Throwable arg2) {
log (LogLevelEnum.ERROR, arg0, arg1, arg2);
}
@Override
public void error(Marker arg0, String arg1, Object arg2, Object arg3) {
log (LogLevelEnum.ERROR, arg0, arg1, arg2, arg3);
}
@Override
public String getName() {
return name;
}
@Override
public void info(String arg0) {
log(LogLevelEnum.INFO, arg0);
}
@Override
public void info(String arg0, Object arg1) {
log(LogLevelEnum.INFO, arg0, arg1);
}
@Override
public void info(String arg0, Object... arg1) {
log(LogLevelEnum.INFO, arg0, arg1);
}
@Override
public void info(String arg0, Throwable arg1) {
log(LogLevelEnum.INFO, arg0, arg1);
}
@Override
public void info(Marker arg0, String arg1) {
log(LogLevelEnum.INFO, arg0, arg1);
}
@Override
public void info(String arg0, Object arg1, Object arg2) {
log(LogLevelEnum.INFO, arg0, arg1, arg2);
}
@Override
public void info(Marker arg0, String arg1, Object arg2) {
log(LogLevelEnum.INFO, arg0, arg1, arg2);
}
@Override
public void info(Marker arg0, String arg1, Object... arg2) {
log(LogLevelEnum.INFO, arg0, arg1, arg2);
}
@Override
public void info(Marker arg0, String arg1, Throwable arg2) {
log(LogLevelEnum.INFO, arg0, arg1, arg2);
}
@Override
public void info(Marker arg0, String arg1, Object arg2, Object arg3) {
log(LogLevelEnum.INFO, arg0, arg1, arg2, arg3);
}
@Override
public boolean isDebugEnabled() {
return debugEnabled;
}
@Override
public boolean isDebugEnabled(Marker arg0) {
return false;
}
@Override
public boolean isErrorEnabled() {
return errorEnabled;
}
@Override
public boolean isErrorEnabled(Marker arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isInfoEnabled() {
// TODO Auto-generated method stub
return infoEnabled;
}
@Override
public boolean isInfoEnabled(Marker arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isTraceEnabled() {
// TODO Auto-generated method stub
return traceEnabled;
}
@Override
public boolean isTraceEnabled(Marker arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isWarnEnabled() {
// TODO Auto-generated method stub
return warnEnabled;
}
@Override
public boolean isWarnEnabled(Marker arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public void trace(String arg0) {
log(LogLevelEnum.TRACE, arg0);
}
@Override
public void trace(String arg0, Object arg1) {
log(LogLevelEnum.TRACE, arg0, arg1);
}
@Override
public void trace(String arg0, Object... arg1) {
log(LogLevelEnum.TRACE, arg0, arg1);
}
@Override
public void trace(String arg0, Throwable arg1) {
log(LogLevelEnum.TRACE, arg0, arg1);
}
@Override
public void trace(Marker arg0, String arg1) {
log(LogLevelEnum.TRACE, arg0, arg1);
}
@Override
public void trace(String arg0, Object arg1, Object arg2) {
log(LogLevelEnum.TRACE, arg0, arg1, arg2);
}
@Override
public void trace(Marker arg0, String arg1, Object arg2) {
log(LogLevelEnum.TRACE, arg0, arg1, arg2);
}
@Override
public void trace(Marker arg0, String arg1, Object... arg2) {
log(LogLevelEnum.TRACE, arg0, arg1, arg2);
}
@Override
public void trace(Marker arg0, String arg1, Throwable arg2) {
log(LogLevelEnum.TRACE, arg0, arg1, arg2);
}
@Override
public void trace(Marker arg0, String arg1, Object arg2, Object arg3) {
log(LogLevelEnum.TRACE, arg0, arg1, arg2, arg3);
}
@Override
public void warn(String arg0) {
log(LogLevelEnum.WARN, arg0);
}
@Override
public void warn(String arg0, Object arg1) {
log(LogLevelEnum.WARN, arg0, arg1);
}
@Override
public void warn(String arg0, Object... arg1) {
log(LogLevelEnum.WARN, arg0, arg1);
}
@Override
public void warn(String arg0, Throwable arg1) {
log(LogLevelEnum.WARN, arg0, arg1);
}
@Override
public void warn(Marker arg0, String arg1) {
log(LogLevelEnum.WARN, arg0, arg1);
}
@Override
public void warn(String arg0, Object arg1, Object arg2) {
log(LogLevelEnum.WARN, arg0, arg1, arg2);
}
@Override
public void warn(Marker arg0, String arg1, Object arg2) {
log(LogLevelEnum.WARN, arg0, arg1, arg2);
}
@Override
public void warn(Marker arg0, String arg1, Object... arg2) {
log(LogLevelEnum.WARN, arg0, arg1, arg2);
}
@Override
public void warn(Marker arg0, String arg1, Throwable arg2) {
log(LogLevelEnum.WARN, arg0, arg1, arg2);
}
@Override
public void warn(Marker arg0, String arg1, Object arg2, Object arg3) {
log(LogLevelEnum.WARN, arg0, arg1, arg2, arg3);
}
}